#include <list>
#include <iostream>
class Resource {
public:
    Resource() {
        // 构造资源时的初始化代码
        std::cout << "Resource Created" << std::endl;
    }

    ~Resource() {
        // 析构资源时的清理代码
        std::cout << "Resource Destroyed" << std::endl;
    }

    void reset() {
        // 重置资源状态以供重新使用
        std::cout << "Resource Reset" << std::endl;
    }
};
class ObjectPool {
private:
    std::list<Resource*> availableResources;

public:
    ~ObjectPool() {
        // 析构时清理所有资源
        for (auto* res : availableResources) {
            delete res;
        }
    }

    Resource* getResource() {
        if (availableResources.empty()) {
            // 池中无可用资源，创建新资源
            return new Resource();
        } else {
            // 从池中取出一个资源
            Resource* resource = availableResources.front();
            availableResources.pop_front();
            return resource;
        }
    }

    void returnResource(Resource* resource) {
        // 重置资源状态，然后将其放回池中
        resource->reset();
        availableResources.push_back(resource);
    }
};
int main() {
    ObjectPool pool;

    // 从池中获取一个资源
    Resource* resource1 = pool.getResource();
    // 使用资源...

    // 将资源返回到池中
    pool.returnResource(resource1);

    // 再次获取相同的资源
    Resource* resource2 = pool.getResource();
    // 使用资源...

    // 再次返回资源
    pool.returnResource(resource2);

    return 0;
}